package cn.com.sp.demo.service;

import java.util.Queue;
import java.util.concurrent.TimeUnit;

public interface TestBlockingQueue<E> extends Queue<E> {

	/**
	 * 将指定的元素插入到此队列的尾部（如果立即可行且不会超过该队列的容量）,在成功时返回
	 * true，如果此队列已满，则抛IllegalStateException。
	 */
	boolean add(E e);

	/**
	 * 将指定的元素插入到此队列的尾部（如果立即可行且不会超过该队列的容量） 将指定的元素插入此队列的尾部，如果该队列已满，
	 * 则在到达指定的等待时间之前等待可用的空间,该方法可中断
	 */
	boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException;

	/**
	 * 将指定的元素插入此队列的尾部，如果该队列已满，则一直等到（阻塞）
	 */
	void put(E e) throws InterruptedException;

	/**
	 * 获取并移除此队列的头部，如果没有元素则等待（阻塞）， //直到有元素将唤醒等待线程执行该操作
	 */
	E take() throws InterruptedException;

	/**
	 * 获取并移除此队列的头部，在指定的等待时间前一直等到获取元素， //超过时间方法将结束
	 */
	E poll(long timeout, TimeUnit unit) throws InterruptedException;

	/**
	 * 从此队列中移除指定元素的单个实例（如果存在）。
	 */
	boolean remove(Object o);

	/**
	 * 除了上述方法还有继承自Queue接口的方法 获取但不移除此队列的头元素,没有则跑异常NoSuchElementException
	 */
	E element();

	/**
	 * 获取但不移除此队列的头；如果此队列为空，则返回 null。
	 */
	E peek();

	/**
	 * 获取并移除此队列的头，如果此队列为空，则返回 null。
	 */
	E poll();
}
